package com.zhihuishu.micro.course.dao;

import com.github.abel533.mapper.Mapper;
import com.zhihuishu.micro.course.model.CourseVideoForBatis;
import com.zhihuishu.micro.course.model.LessonVideo;
import com.zhihuishu.micro.course.model.LessonVideoCount;

import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 
 * @author zhanglikun
 * @date 2015年10月28日 下午3:03:07
 */
public interface LessonVideoMapper extends Mapper<LessonVideo> {

    void save(LessonVideo lv);

    void remove(long lvId);

    void update(LessonVideo lv);

    LessonVideo get(int lvId);

    List<LessonVideo> getList(List<Integer> listLvId);

    List<Integer> list(int lessonId);

    List<Integer> listByCourseId(int courseId);

    LessonVideoCount countLvsAndGetLessonId(long lessonVideoId);

    LessonVideo selectFirstVideoInfo(long lessonId);

    /**
     * 根据章ID列表，查询视频数
     * 
     * @param chapterIds
     * @return
     */
    int countVideos(@Param("chapterIds")
    List<Integer> chapterIds);

    /**
     * 根据课程ID集合获取小节
     * 
     * @author ztl
     * @param courseIds
     * @return
     */
    List<CourseVideoForBatis> getSmallLessonByCourseIds(@Param("courseIds")
    List<Long> courseIds);

    /**
     * 根据节Id获取小节集合
     * 
     * @author ztl
     * @param lessonId
     * @return
     */
    List<LessonVideo> getLessonVideoListFromDb(@Param("lessonId")
    Integer lessonId);

    void sort(List<LessonVideo> lessons);

    /**
     * @Description:删除节视频在小节表中的数据
     * @date:@2016年12月9日下午1:44:31
     * @author:嵇鹏
     * @Param:
     * @retuen:void
     */
    void deleteLessonVideoInfo(@Param("lessonId")Integer lessonId);
    /**
     * @Description:查询节下小节的数量
     *  @date:@2016年12月9日下午1:55:38
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:int
     */
    int queryLessonChildrenCount(Integer lessonId);
    /**
     * @Description:删除小节后 小节后的节要更改排序-1
     *  @date:@2016年12月12日上午9:28:11
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:void
     */
    void updateMinusSortByLessonIdAndSort(@Param("lessonId")Long lessonId,@Param("rank")Integer rank);
    /**
     * @Description:更新小节排序后影响到的其他的节的信息
     *  @date:@2016年12月12日上午11:11:41
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:void
     *  
     */
    void updatePlussLessonVideoSortContaninSmall(@Param("targetPosSmall")int targetPosSmall, @Param("orginPosBig")int orginPosBig, @Param("lessonId")Long lessonId);
    /**
     * @Description:查询更新小节顺序后影响到其他的小节的信息
     *  @date:@2016年12月12日上午11:25:58
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:List<Integer>
     */
    List<Integer> queryPlusLessonVideoIdsContainSmall(@Param("targetPosSmall")int targetPosSmall, @Param("orginPosBig")int orginPosBig, @Param("lessonId")Long lessonId);
    /**
     * @Description:查询更新小节顺序后影响到其他的小节的信息
     *  @date:@2016年12月12日下午1:26:04
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:List<Integer>
     */
    List<Integer> queryMinusLessonVideoIdContainBig(@Param("orginPosSmall")int orginPosSmall, @Param("targetPosBig")int targetPosBig, @Param("lessonId")Long lessonId);
    /**
     * @Description:更新小节顺序后影响到其他小节的顺序也进行更新
     *  @date:@2016年12月12日下午1:40:51
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:void
     */
    void updateMinusLessonVideoSortContainBig(@Param("orginPosSmall")int orginPosSmall,@Param("targetPosBig")int targetPosBig, @Param("lessonId")Long lessonId);
    /**
     * @Description:查询节下组大的小节序号
     *  @date:@2016年12月16日上午11:20:25
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:int
     */
    int queryMaxSortOfLesson(Long lessonId);
    /**
     * @Description:小节完整度检查的必须项目
     *  @date:@2016年12月19日上午10:54:46
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:List<LessonVideo>
     */
    List<LessonVideo> selectInfoForCompCheck(Integer chapterId);
    /**
     * @Description:查询节下所有子小节id
     *  @date:@2016年12月27日上午11:09:39
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:List<Integer>
     */
    List<Integer> queryLessonVideoIdsByLessonId(Integer lessonId);
    /**
     * @Description:根据章id查询所有的小节
     *  @date:@2016年12月27日上午11:44:05
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:List<Integer>
     */
    List<Integer> queryLessonVideoIdsByChapterId(Integer chapterId);
    /**
     * @Description:根据课程id查询小节id
     *  @date:@2017年1月12日下午4:19:33
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:List<Integer>
     */
    List<Integer> queryLessonVideoIdsByCourseId(long courseId);

}